const models = require('./db')
const express = require('express')
const qiniu = require('qiniu')
const router = express.Router()
var config = new qiniu.conf.Config()
config.zone = qiniu.zone.Zone_z2
/* ************* 创建(create) 读取(get) 更新(update) 删除(delete) ************* */
/* ***********注册登录************* */
// 获取已有账号登录的接口
router.post('/api/login/getLogin', (req, res) => {
  let obj = {
    username: req.body.username,
    password: req.body.password,
    nickname: req.body.nickname || ''
  }
  let newUser = new models.Login(obj)
  let newUser1 = new models.Users({userInfo: obj, username: obj.username})
  // console.log(newUser, ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]')
  // 通过模型去查找数据库
  models.Login.find((err, data) => {
    // console.log('查找已有的用户', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(data)
      let tempuser = data.filter(f => f.username === obj.username)
      // console.log(tempuser, '[[[[[[[[[[[[[[[[[[[[[[')
      if (!tempuser.length && obj.username) {
        // 数据库登录
        newUser.save((err, data) => {
          if (err) {
            res.send(err)
          } else {
            console.log('createLogin successed')
            // res.send('createLogin successed')
          }
        })
      }
    }
  })
  // 查找并写入所有用户
  models.Users.find((err, data) => {
    // console.log('查找已有的用户', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(data)
      let tempuser = data.filter(f => f.username === obj.username)
      // console.log(tempuser, '[[[[[[[[[[[[[[[[[[[[[[')
      if (!tempuser.length && obj.username) {
        // 所有用户写入
        newUser1.save((err, data) => {
          if (err) {
            res.send(err)
          } else {
            console.log('createUser successed写入所有用户数据库成功')
            res.send('createUser successed写入所有用户数据库成功')
          }
        })
      } else {
        res.send('已经存在该用户')
      }
    }
  })
})
/*
// 创建登录的账号接口
router.post('/api/login/createLogin', (req, res) => {
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let newUser = new models.Login({
    username: req.body.username,
    password: req.body.password,
    nickname: req.body.nickname
  })
  // let newUser1 = {
  //   username: req.body.username,
  //   password: req.body.password,
  //   nickname: req.body.nickname
  // }
  // console.log(newUser1, newUser, '新登录的用户')
  // 保存数据newAccount数据进mongoDB
   // 如果接收到的用户名有内容
  if (newUser.username) {
    newUser.save((err, data) => {
      if (err) {
        res.send(err)
      } else {
        // console.log(data, '9999999999999999999')
        res.send('createLogin successed')
      }
    })
  }
})
*/
// 创建退出登录的账号接口
router.post('/api/login/exitLogin', (req, res) => {
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let currentUser = new models.Login({
    username: req.body.username
  })
  // console.log(currentUser.username, '[[[[[[[[[[[[[[[[[[[[[[[[[')
  // console.log(currentUser, '从数据库的用户删除已经登录的当前用户')
  // 进mongoDB删除数据
  models.Login.deleteMany({username: currentUser.username}, (err, data) => {
    if (err) {
      res.send(err)
    } else {
      // console.log('删除成功')
      res.send('exitLogin successed')
    }
  })
})
// 获取已有账号注册的接口， 这里后面需要获取环信上面所有有注册账号的IM用户
router.post('/api/register/getRegister', (req, res) => {
  let obj = {
    username: req.body.username,
    password: req.body.password,
    nickname: req.body.nickname || '',
    email: req.body.email || ''
}
  let newUser = new models.Register(obj)
  let newUser1 = new models.Users({userInfo: obj, username: obj.username})
  // console.log(newUser, ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]')
  models.Register.find((err, data) => {
    // console.log('查找已经注册的用户', data)
    if (err) {
      res.send(err)
    } else {
      // 查找已经注册的用户
      // console.log(data, '[[[[[[[[[[[[[[[[[[[[[[')
      let tempuser = data.filter(f => f.username === obj.username)
            // console.log(tempuser, '[[[[[[[[[[[[[[[[[[[[[[')
// 当前注册用户如果没有找到匹配的，说明还没有注册过
      if (!tempuser.length && obj.username) {
        // 数据库注册
        newUser.save((err, data) => {
          if (err) {
            res.send(err)
          } else {
            // console.log(data, '9999999999999999999')
            res.send('createRegister successed')
          }
        })
        // 所有用户写入
        newUser1.save((err, data) => {
          if (err) {
            res.send(err)
          } else {
            console.log('写入所有用户数据库成功')
          //   res.send('createUsers successed')
          }
        })
      }
      // res.send(data)
    }
  })
})
/*
// 添加注册的账号， 之后可以先获取所有IM用户，只要里面有的，就可以进行登录验证
router.post('/api/register/createRegister', (req, res) => {
  let obj = {
      username: req.body.username,
      password: req.body.password,
      nickname: req.body.nickname || '',
      email: req.body.email || ''
  }
  let newUser = new models.Register(obj)
  let newUser1 = new models.Users({userInfo: obj, username: obj.username})
  // console.log(newUser1, '新注册的用户')
  // 添加进register表
  newUser.save((err, data) => {
    if (err) {
      res.send(err)
    } else {
      // 添加进所有的用户的表
      newUser1.save((err, data) => {
        if (err) {
          res.send(err)
        } else {
          console.log('写入所有用户数据库成功')
        //   res.send('createUsers successed')
        }
      })
      console.log('写入数据库成功')
      res.send('createRegister successed')
    }
  })
})
*/
/* ***点击登录之后将新登录的用户添加进Users表中*** */
/*
router.post('/api/login/createUsers', (req, res) => {
  let obj = {
    username: req.body.username,
    password: req.body.password,
    nickname: req.body.nickname || '',
    email: req.body.email || ''
  }
  let user = {username: req.body.username}
  // let flag = false
  models.Users.find(user, (err, data) => {
    // console.log('查找用户的聊天列表信息', data)
    if (err) {
      // 在登录用户列表中没有找到该用户
      // res.send(err)
      console.log('数据库请求所有用户数据出错')
    } else {
      // console.log('*******', data)
      if (!data.length && data[0].username) {
        console.log('在用户列表中没有找到该用户')
        let newUser = new models.Users({userInfo: obj, username: obj.username})
        // 先查找User数据库，所有用户列表中，如果有该用户，则不添加进去，如果没有该用户列表，就添加进去
        // 如果接收到的用户名有内容
        if (newUser.username) {
          newUser.save((err, data) => {
            if (err) {
              console.log('写入所有用户数据库失败')
            } else {
              // 添加进所有的用户的表
              console.log('写入所有用户数据库成功')
              res.send('createUser successed')
            }
          })
        }
      } else {
        res.send('在用户列表中找到该用户,不做任何操作')
        console.log('在用户列表中找到该用户,不做任何操作')
      }
    }
  })
})
*/
/* ***********登录之后更新数据表Users************* */
// 登录之后获取好友的信息，然后更新数据库 Model.update(condition,doc,[options],[callback]);
router.post('/api/users/friends', (req, res) => {
  // console.log(req.body.username)
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let currentUser = new models.Users({
    username: req.body.username,
    friends: req.body.friends
  })
  // console.log(currentUser, '当前登录的用户的好友列表')
  // console.log(currentUser.friends, '当前登录的用户的好友列表')
  // 进mongoDB整个更新好友列表数据
  models.Users.findOne({username: req.body.username}, (err, data) => {
    if (err) {
      res.send(err)
    } else {
      // console.log(data, '777777777777')
      data.setFriend(currentUser.friends)
      res.send('users/friends set successed')
    }
  })
})
// 添加好友
router.post('/api/users/friendsAdd', (req, res) => {
  // console.log(req.body.username)
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let currentUser = new models.Users({
    username: req.body.username
  })
  let friendObj = req.body.friendObj
  // console.log(currentUser, '当前登录的用户的好友列表')
  // console.log(friendObj, '当前登录的用户需要添加的好友')
  // 进mongoDB整个更新好友列表数据
  models.Users.findOne({username: currentUser.username}, (err, data) => {
    if (err) {
      res.send(err)
    } else {
      // console.log(data, '777777777777')
      data.addFriend(friendObj)
      res.send('users/friends set successed')
    }
  })
})
// 删除好友
router.post('/api/users/friendsDelete', (req, res) => {
  // console.log(req.body.username)
  // 这里的req.body能够使用就在index.js中引入了const bodyParser = require('body-parser')
  let currentUser = new models.Users({
    username: req.body.username
  })
  // 进mongoDB删除数据
  models.Users.findOne({username: currentUser.username}, (err, data) => {
    if (err) {
      res.send(err)
      } else {
        if (!data) {
          return
        }
        // console.log(data)
        data.deleteFriend(req.body.jid)
        res.send(data)
    }
  })
})
// 查找当前登录的用户的消息列表信息
router.get('/api/users/getmessagelist', (req, res) => {
  // console.log(req.query, '7897897897798')
  // console.log(req.params)
  let obj = {
    username: req.query.username
  }
  models.Users.find(obj, (err, data) => {
    if (err) {
      res.send(err)
    } else {
      res.json(data)
    }
  })
})
// 修改用户信息头像
router.post('/api/users/resetUserInfoHeadicon', (req, res) => {
  let obj = {
    username: req.body.username,
    headicon: req.body.headicon
  }
  // console.log(obj)
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(data)
      data.resetHeadicon(obj.headicon)
      res.send('数据库更换头像成功')
    }
  })
})
// 设置当前登录的用户的消息列表信息
router.post('/api/users/setMessageList', (req, res) => {
  let obj = {
    username: req.body.username,
    messageList: req.body.messageList
  }
  models.Users.updateOne({username: obj.username}, {messageList: obj.messageList}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      res.send(data)
    }
  })
})
// delete当前登录的用户的消息列表信息
router.post('/api/users/deleteMessageList', (req, res) => {
  let obj = {
    username: req.body.username,
    jid: req.body.jid
  }
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err, '************************************************')
    } else {
      if (!data) {
        return
      }
      data.deleteMessageList(req.body.jid)
      res.send(data)
    }
  })
})
// 添加当前用户收到的好友添加的信息
router.post('/api/users/setaddNewFriend', (req, res) => {
  let obj = new models.Users({
    username: req.body.username
  })
  // console.log(obj, '333333333333333333333')
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      // console.log('111111', data)
      data.setAddNewFriends(req.body.message)
      res.send(data)
    }
  })
})
// 更新当前用户收到的好友添加的信息
router.post('/api/users/resetaddNewFriend', (req, res) => {
  let obj = {
    username: req.body.username,
    obj: req.body.obj
  }
  // let currentUser = new models.Users({
  //   username: req.body.username
  // })
  console.log('true', obj)
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      if (!data) {
        return
      }
      // console.log(111111)
      data.resetAddNewFriends(obj.obj)
      res.send(data)
    }
  })
})
// 删除用户添加好友信息记录 长长的jid
router.post('/api/users/deleteaddNewFriend', (req, res) => {
  let obj = {
    username: req.body.username,
    jid: req.body.jid
  }
  // console.log(obj.arr)
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(111111)
      data.deleteAddNewFriends(obj.jid)
      res.send(data)
    }
  })
})
// 查找当前用户收到的添加好友的请求
router.post('/api/users/setaddNewFriend', (req, res) => {
  let obj = {
    username: req.body.username
    // message: req.body.message
  }
  // console.log(obj)
  models.Users.update(obj, (err, data) => {
    if (err) {
      res.send(err, '用户添加新好友信息查找失败')
    } else {
      // console.log('***********************************')
      res.json(data)
      // res.send(data)
    }
  })
})
/*
s=群组相关
*/
//
router.post('/api/users/setGroupOption', (req, res) => {
  let obj = {
    username: req.body.username,
    groupOption: req.body.groupOption
  }
/*
 let arr = []
 obj.groupOption.affiliations.forEach(f => {
    arr.push(f['member'] || f['owner'])
 })
//  console.log(arr)
  models.Users.find({username: {$in: arr}}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(111111, data)
      obj.groupOption.affiliations.forEach(f => {
        let result = data.filter(ff => (f['member'] || f['owner']) === ff.username)
        // console.log(result[0])
        f['headicon'] = result[0].userInfo.headicon || ''
      })
    }
  })
  */
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(111111, data)
      // console.log(222222, obj.groupOption)、
      data.setgroupOptions(obj.groupOption)
      res.send('数据库存储群信息成功')
    }
  })
})
router.post('/api/users/getGroupOptionSingle', (req, res) => {
  let obj = {
    username: req.body.username,
    groupOption: req.body.groupOption
  }
 let arr = []
 obj.groupOption.affiliations.forEach(f => {
    arr.push(f['member'] || f['owner'])
 })
//  console.log(arr)
  models.Users.find({username: {$in: arr}}, (err, data) => {
    if (err) {
      res.send(err)
    } else {
      // console.log(111111, data)
      obj.groupOption.affiliations.forEach(f => {
        let result = data.filter(ff => (f['member'] || f['owner']) === ff.username)
        // console.log(result[0])
        f['headicon'] = result[0].userInfo.headicon || ''
      })
    }
  })
  models.Users.findOne({username: obj.username}, (err, data) => {
    // console.log('修改用户的聊天列表信息', data)
    if (err) {
      res.send(err)
    } else {
      // console.log(111111, data)
      // console.log(222222, obj.groupOption)
      data.setgroupOptions(obj.groupOption)
      res.json(obj.groupOption)
    }
  })
})
/*
e=群组相关
*/
/*
s=文件传输
*/
// 获取文件的上传凭证，后面改为覆盖上传************
router.get('/api/users/fileSend', (req, res) => {
  let aK = 'nBtNMk64ZpHgb0XsNmbr1FJM4jjOcw-awz7KWGRf'
  let sK = 'gVNsgSxaKbnLT_DabwmeO6BvN-HXhPxwCcn1Nfo2'
  let mac = new qiniu.auth.digest.Mac(aK, sK)
  // console.log(mac)
  let option = {
    scope: 'minichat'
  }
  let put = new qiniu.rs.PutPolicy(option)
  let uploadToken = put.uploadToken(mac)
  // console.log(uploadToken)
  res.send(uploadToken)
})
/*
e=文件传输
*/
module.exports = router
